home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2006 December
/
PCWorld_2006-12_cd.bin
/
v cisle
/
robocopy
/
rktools.exe
/
RCDATA
/
CABINET
/
rktools.msi
/
prncfg.vbs
< prev
next >
Wrap
Text File
|
2003-04-18
|
20KB
|
766 lines
'----------------------------------------------------------------------
'
' Copyright (c) Microsoft Corporation 1998-2003
' All Rights Reserved
'
' Abstract:
'
' prncfg.vbs - printer configuration script for Windows .NET Server 2003
'
' Usage:
' prncfg [-gs?] [-b printer][-r port]
' [-l location][-m comment][-s share][-f sep-file]
' [-t data-type][-a attributes [+|-]value> etc.]
' Examples:
' prncfg.vbs -g -b \\server\printer
' prncfg.vbs -s -b printer -l "Office" -m "driver a"
' prncfg.vbs -s -b printer -h "Share" -a "attributes +shared attributes -direct"
'----------------------------------------------------------------------
option explicit
'
' Debugging trace flags, to enable debug output trace message
' change gDebugFlag to true.
'
const kDebugTrace = 1
const kDebugError = 2
dim gDebugFlag
gDebugFlag = false
'
' Messages to be displayed if the scripting host is not cscript
'
const kMessage1 = "Please run this script using CScript."
const kMessage2 = "This can be achieved by"
const kMessage3 = "1. Using ""CScript script.vbs arguments"" or"
const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
const kMessage5 = " using ""CScript //H:CScript //S"" and running the script "
const kMessage6 = " ""script.vbs arguments""."
'
' Operation action values.
'
const kActionUnknown = 0
const kActionSet = 1
const kActionGet = 2
const kErrorSuccess = 0
const KErrorFailure = 1
const kPrinterQueued = 1
const kPrinterDirect = 2
const kPrinterDefault = 4
const kPrinterShared = 8
const kPrinterNetwork = 16
const kPrinterHidden = 32
const kPrinterLocal = 64
const kPrinterEnableDevq = 128
const kPrinterKeepPrinterJobs = 256
const kPrinterDoCompleteFirst = 512
const kPrinterWorkOffline = 1024
const kPrinterEnableBidi = 2048
const kPrinterRawOnly = 4096
const kPrinterPublished = 8192
const kPrinterStatusPaused = 1
const kPrinterStatusError = 2
const kPrinterStatusPendingDeletion = 4
const kPrinterStatusPapeJam = 8
const kPrinterStatusPaperOut = 16
const kPrinterStatusManualFeed = 32
const kPrinterStatusPaperProblem = 64
const kPrinterStatusOffline = 128
const kPrinterStatusIOActive = 256
const kPrinterStatusBusy = 512
const kPrinterStatusPrinting = 1024
const kPrinterStatusOuptutBinFull = 2048
const kPrinterStatusNotAvailable = 4096
const kPrinterStatusWaiting = 8192
const kPrinterStatusProcessing = 16834
const kPrinterStatusInitializing = 32768
const kPrinterStatusWarmingUp = 65536
const kPrinterStatusTonerLow = 131072
const kPrinterStatusNoToner = 262144
const kPrinterStatusPagePunt = 524288
const kPrinterStatusUserIntervention = 1048576
const kPrinterStatusOutOfMemory = 2097152
const kPrinterStatusDoorOpen = 4194304
const kPrinterStatusServerUnknown = 8388608
const kPrinterStatusPowerSave = 16777216
main
'
' Main execution starts here
'
sub main
dim iAction
dim iRetval
dim strPrinter, strPort, strShare, strComment
dim strLocation, Data, strSep, strNewName
dim ParamDict, AttributeDictionary, StatusDictionary
'
' Abort if the host is not cscript
'
if not IsHostCscript() then
call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
kMessage5 & vbCRLF & kMessage6 & vbCRLF)
wscript.quit
end if
set ParamDict = CreateObject("Scripting.Dictionary")
set AttributeDictionary = CreateObject("Scripting.Dictionary")
set StatusDictionary = CreateObject("Scripting.Dictionary")
BuildAttributeDictionary AttributeDictionary
BuildStatusDictionary StatusDictionary
iRetval = ParseCommandLine(iAction, strPrinter, strPort, strShare, strComment, _
strLocation, Data, strSep, strNewName, ParamDict)
if iRetval = kErrorSuccess then
select case iAction
case kActionSet
iRetval = SetPrinter(strPrinter, strPort, strShare, strComment, _
strLocation, Data, strSep, strNewName, ParamDict)
case kActionGet
iRetval = GetPrinter(strPrinter, AttributeDictionary, StatusDictionary)
case else
Usage(True)
exit sub
end select
end if
end sub
'
' Get printer configuration
'
function GetPrinter(strPrinterName, AttributeDictionary, StatusDictionary)
on error resume next
DebugPrint kDebugTrace, "In GetPrinter"
dim oPrinter
dim oMaster
dim iRetval
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oPrinter = CreateObject("Printer.Printer.1")
oMaster.PrinterGet "", strPrinterName, oPrinter
if Err.Number = kErrorSuccess then
wscript.echo "Success: getting printer config"
wscript.echo
wscript.echo "PrinterName: " & oPrinter.PrinterName
wscript.echo "ShareName: " & oPrinter.ShareName
wscript.echo "PortName: " & oPrinter.PortName
wscript.echo "DriverName " & oPrinter.DriverName
wscript.echo "Comment: " & oPrinter.Comment
wscript.echo "Location: " & oPrinter.Location
wscript.echo "SepFile: " & oPrinter.Sepfile
wscript.echo "PrintProc: " & oPrinter.PrintProcessor
wscript.echo "Datatype: " & oPrinter.Datatype
wscript.echo "Parameters: " & oPrinter.Parameters
BuildExplanationString AttributeDictionary, oPrinter.Attributes, "Attributes: "
wscript.echo "Priority: " & CStr(oPrinter.Priority)
wscript.echo "DefaultPri: " & CStr(oPrinter.DefaultPriority)
wscript.echo "StartTime: " & CStr(oPrinter.StartTime)
wscript.echo "UntilTime: " & CStr(oPrinter.UntilTime)
if oPrinter.Status = 0 then
wscript.echo "Status: Ready"
else
BuildExplanationString StatusDictionary, oPrinter.Status, "Status: "
end if
wscript.echo "Jobcount: " & CStr(oPrinter.Jobs)
wscript.echo "AveragePPM " & CStr(oPrinter.AveragePPM)
wscript.echo
iRetval = kErrorSuccess
else
wscript.echo "Unable to get the printer config, error: 0x" & _
Hex(Err.Number) & ". " & Err.Description
iRetval = kErrorFailure
end if
GetPrinter = iRetval
end function
'
' Configure a printer
'
function SetPrinter(strPrinter, strPort, strShare, strComment, strLocation, Data, strSep, strNewName, AttrDict)
on error resume next
DebugPrint kDebugTrace, "In SetPrinter"
dim oPrinter
dim oMaster
dim iRetval
set oMaster = CreateObject("PrintMaster.PrintMaster.1")
set oPrinter = CreateObject("Printer.Printer.1")
oMaster.PrinterGet "", strPrinter, oPrinter
if strPort <> "" then
oPrinter.PortName = strPort
end if
if strShare <> "" then
oPrinter.ShareName = strShare
end if
if strLocation <> "" then
oPrinter.Location = strLocation
end if
if strComment <> "" then
oPrinter.Comment = strComment
end if
if Data <> "" then
oPrinter.DataType = Data
end if
oPrinter.NewName = strNewName
oPrinter.SepFile = strSep
' Field Queued
'
if AttrDict.Exists("queued") then
oPrinter.Queued = AttrDict.Item("queued")
end if
' Field Direct
'
if AttrDict.Exists("direct") then
oPrinter.Direct = AttrDict.Item("direct")
end if
' Field Default
'
if AttrDict.Exists("default") then
oPrinter.Default = AttrDict.Item("default")
end if
' Field Shared
'
if AttrDict.Exists("shared") then
oPrinter.Shared = AttrDict.Item("shared")
end if
' Field Hidden
'
if AttrDict.Exists("hidden") then
oPrinter.Hidden = AttrDict.Item("hidden")
end if
' Field EnableDevq
'
if AttrDict.Exists("enabledevq") then
oPrinter.EnableDevq = AttrDict.Item("enabledevq")
end if
' Field KeepPrintedJobs
'
if AttrDict.Exists("keepprintedjobs") then
oPrinter.KeepPrintedJobs = AttrDict.Item("keepprintedjobs")
end if
' Field DocompleteFirst
'
if AttrDict.Exists("docompletefirst") then
oPrinter.DoCompleteFirst = AttrDict.Item("docompletefirst")
end if
' Field workOffline
'
if AttrDict.Exists("workoffline") then
oPrinter.WorkOffline = AttrDict.Item("workoffline")
end if
' Field EnableBidi
'
if AttrDict.Exists("enablebidi") then
oPrinter.EnableBidi = AttrDict.Item("enablebidi")
end if
' Field RawOnly
'
if AttrDict.Exists("rawonly") then
oPrinter.RawOnly = AttrDict.Item("rawonly")
end if
' Field Published
'
if AttrDict.Exists("published") then
oPrinter.Published = AttrDict.Item("published")
end if
oMaster.PrinterSet oPrinter
if Err.Number = kErrorSuccess then
wscript.echo "Success: configuring printer """ & strPrinter & """ "
iRetval = kErrorSuccess
else
wscript.echo "Unable to configure printer """ & strPrinter & """, error: 0x"_
& Hex(Err.Number) & " " & Err.Description
iRetval = kErrorFailure
end if
SetPrinter = iRetval
end function
'
' Builds a string description of the number
' The bits in the number have values associated in the dictionary
'
sub BuildExplanationString(oDict, Number, strInit)
on error resume next
dim strExpl
dim AllKeys
dim iIndex
strExpl = strInit
AllKeys = oDict.Keys
for iIndex = 0 to oDict.Count -1
if (Number and AllKeys(iIndex)) = AllKeys(iIndex) then
strExpl = strExpl + oDict.Item(AllKeys(iIndex))
end if
next
wscript.echo strExpl
end sub
'
' Initializes the AttributeDictionary
'
sub BuildAttributeDictionary(AttrExplanationDict)
AttrExplanationDict.Add kPrinterQueued, "Queued "
AttrExplanationDict.Add kPrinterDirect, "Direct "
AttrExplanationDict.Add kPrinterDefault, "Default "
AttrExplanationDict.Add kPrinterShared, "Shared "
AttrExplanationDict.Add kPrinterNetwork, "Network "
AttrExplanationDict.Add kPrinterHidden, "Hidden "
AttrExplanationDict.Add kPrinterLocal, "Local "
AttrExplanationDict.Add kPrinterEnableDevq, "EnableDevq "
AttrExplanationDict.Add kPrinterKeepPrinterJobs, "KeepPrintedJobs "
AttrExplanationDict.Add kPrinterDoCompleteFirst, "DoCompleteFirst "
AttrExplanationDict.Add kPrinterWorkOffline, "WorkOffLine "
AttrExplanationDict.Add kPrinterEnableBidi, "EnbleBiDi "
AttrExplanationDict.Add kPrinterRawOnly, "RawOnly "
AttrExplanationDict.Add kPrinterPublished, "Published "
end sub
'
' Initializes the AttributeDictionary
'
sub BuildStatusDictionary(StatusDict)
StatusDict.Add kPrinterStatusPaused, "Paused "
StatusDict.Add kPrinterStatusError, "Error "
StatusDict.Add kPrinterStatusPendingDeletion, "PendingDeletion "
StatusDict.Add kPrinterStatusPapeJam, "PaperJam "
StatusDict.Add kPrinterStatusPaperOut, "PaperOut "
StatusDict.Add kPrinterStatusManualFeed, "ManualFeed "
StatusDict.Add kPrinterStatusPaperProblem, "PaperProblem "
StatusDict.Add kPrinterStatusOffline, "Offline "
StatusDict.Add kPrinterStatusIOActive, "IOActive "
StatusDict.Add kPrinterStatusBusy, "Busy "
StatusDict.Add kPrinterStatusPrinting, "Printing "
StatusDict.Add kPrinterStatusOuptutBinFull, "OutputBinFull "
StatusDict.Add kPrinterStatusNotAvailable, "NotAvailable "
StatusDict.Add kPrinterStatusWaiting, "Waiting "
StatusDict.Add kPrinterStatusProcessing, "Processing "
StatusDict.Add kPrinterStatusInitializing, "Initializing "
StatusDict.Add kPrinterStatusWarmingUp, "Warming Up "
StatusDict.Add kPrinterStatusTonerLow, "TonerLow "
StatusDict.Add kPrinterStatusNoToner, "NoToner "
StatusDict.Add kPrinterStatusPagePunt, "PagePunt "
StatusDict.Add kPrinterStatusUserIntervention,"UserIntervention "
StatusDict.Add kPrinterStatusOutOfMemory, "OutOfMemory "
StatusDict.Add kPrinterStatusDoorOpen, "DoorOpen "
StatusDict.Add kPrinterStatusServerUnknown, "ServerUnknown "
StatusDict.Add kPrinterStatusPowerSave, "PowerSave "
end sub
'
' Prints the contents of the dictionary
'
sub PrintDictionary(oDict)
dim KeyArray
dim iIndex
wscript.echo "Iterating the dictionary"
KeyArray = oDict.Keys
for iIndex = 0 to oDict.Count -1
wscript.echo KeyArray(iIndex) & " " & dict.Item(KeyArray(iIndex))
next
end sub
'
' Debug display helper function
'
sub DebugPrint(uFlags, strString)
if gDebugFlag = true then
if uFlags = kDebugTrace then
wscript.echo "Debug: " & strString
end if
if uFlags = kDebugError then
if Err <> 0 then
wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
end if
end if
end if
end sub
'
' Parse the command line into it's components
'
function ParseCommandLine(iAction, strPrinter, strPort, strShare, strComment, strLocation, Data, strSep, strNewName, AttrDict)
on error resume next
DebugPrint kDebugTrace, "In the ParseCommandLine"
dim oArgs
dim iIndex
iAction = kActionUnknown
iIndex = 0
set oArgs = wscript.Arguments
while iIndex < oArgs.Count
select case oArgs(iIndex)
case "-g"
iAction = kActionGet
case "-s"
iAction = kActionSet
case "-b"
iIndex = iIndex + 1
strPrinter = oArgs(iIndex)
case "-r"
iIndex = iIndex + 1
strPort = oArgs(iIndex)
case "-h"
iIndex = iIndex + 1
strShare = oArgs(iIndex)
case "-m"
iIndex = iIndex + 1
strComment = oArgs(iIndex)
case "-l"
iIndex = iIndex + 1
strLocation = oArgs(iIndex)
case "-t"
iIndex = iIndex + 1
Data = oArgs(iIndex)
case "-f"
iIndex = iIndex + 1
strSep = oArgs(iIndex)
case "-w"
iIndex = iIndex + 1
strNewName = oArgs(iIndex)
case "-queued"
AttrDict.Add "queued", false
case "+queued"
AttrDict.Add "queued", true
case "-direct"
AttrDict.Add "direct", false
case "+direct"
AttrDict.Add "direct", true
case "-default"
AttrDict.Add "default", false
case "+default"
AttrDict.Add "default", true
case "-shared"
AttrDict.Add "shared", false
case "+shared"
AttrDict.Add "shared", true
case "-hidden"
AttrDict.Add "hidden", false
case "+hidden"
AttrDict.Add "hidden", true
case "-enabledevq"
AttrDict.Add "enabledevq", false
case "+enabledevq"
AttrDict.Add "enabledevq", true
case "-keepprintedjobs"
AttrDict.Add "keepprintedjobs", false
case "+keepprintedjobs"
AttrDict.Add "keepprintedjobs", true
case "-docompletefirst"
AttrDict.Add "docompletefirst", false
case "+docompletefirst"
AttrDict.Add "docompletefirst", true
case "-workoffline"
AttrDict.Add "workoffline", false
case "+workoffline"
AttrDict.Add "workoffline", true
case "-enablebidi"
AttrDict.Add "enablebidi", true
case "+enablebidi"
AttrDict.Add "enablebidi", true
case "-rawonly"
AttrDict.Add "rawonly", false
case "+rawonly"
AttrDict.Add "rawonly", true
case "-published"
AttrDict.Add "published", false
case "+published"
AttrDict.Add "published", true
case "-?"
Usage(true)
exit function
case else
Usage(true)
exit function
end select
iIndex = iIndex + 1
wend
if Err = kErrorSuccess then
ParseCommandLine = kErrorSuccess
else
wscript.echo "Unable to parse command line, error 0x" & Hex(Err.Number) _
& ". " & Err.Description
ParseCommandLine = kErrorFailure
end if
end function
'
' Display command usage.
'
sub Usage(bExit)
wscript.echo "Usage: prncfg [-gs?] [-b printer][-r port][-w new printer name]"
wscript.echo " [-l location][-m comment][-h share name][-f sep file]"
wscript.echo " [-t datatype][<+|->shared][<+|->direct][<+\->default][<+|->published]"
wscript.echo " [<+|->rawonly][<+|->keepprintedjobs][<+|->queued]"
wscript.echo "Arguments:"
wscript.echo "-g - get configuration"
wscript.echo "-s - set configuration"
wscript.echo "-? - display command usage"
wscript.echo "-b - printer name"
wscript.echo "-r - port name"
wscript.echo "-w - new printer name"
wscript.echo "-l - location string"
wscript.echo "-h - share name"
wscript.echo "-f - separator file string"
wscript.echo "-t - data type string"
wscript.echo "-m - comment string"
wscript.echo ""
wscript.echo "Examples:"
wscript.echo "prncfg.vbs -g -b \\server\printer"
wscript.echo "prncfg.vbs -s -b Printer -l ""Building A/Floor 100/Office 1"""
wscript.echo "prncfg.vbs -s -b Printer -h ""Share"" +shared -direct"
wscript.echo "prncfg.vbs -s -b Printer +rawonly +keepprintedjobs"
if bExit then
wscript.quit(1)
end if
end sub
'
' Determines which program is used to run this script.
' Returns true if the script host is cscript.exe
'
function IsHostCscript()
on error resume next
dim strFullName
dim strCommand
dim i, j
dim bReturn
bReturn = false
strFullName = WScript.FullName
i = InStr(1, strFullName, ".exe", 1)
if i <> 0 then
j = InStrRev(strFullName, "\", i, 1)
if j <> 0 then
strCommand = Mid(strFullName, j+1, i-j-1)
if LCase(strCommand) = "cscript" then
bReturn = true
end if
end if
end if
if Err <> 0 then
call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
& ". " & vbCRLF & "The scripting host could not be determined.")
end if
IsHostCscript = bReturn
end function